﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using AcademiaEntidades;

namespace AcademiaDAO
{
    public class TipoDocumentoDAO
    {
        //Metodo para obtener todos los tipos de documentos
        public static List<TipoDocumento> obtenerTodosTipoDoc()
        {
            SqlConnection cn = null;
            List<TipoDocumento> listaDoc = new List<TipoDocumento>();
            try
            {
                cn = AccesoDato.dameConexion();
                cn.Open();
                //Armo el command para ejecutar la setencia sql
                SqlCommand cmd = new SqlCommand();
                cmd.CommandText = "select * from TipoDocumento";
                cmd.Connection = cn;
                cmd.CommandType = CommandType.Text;
                SqlDataReader dr = cmd.ExecuteReader();

                TipoDocumento tipoDoc;
                while (dr.Read())
                {
                    tipoDoc = new TipoDocumento();
                    tipoDoc.IdTipoDocumento = int.Parse(dr["IdTipoDocumento"].ToString());
                    tipoDoc.Descripcion = dr["Descripcion"].ToString();
                    listaDoc.Add(tipoDoc);
                    tipoDoc = null;
                }
                dr.Close();

            }
            catch (Exception ex)
            {
                throw new Exception("No se pudieron obtener los datos de tipo de documento");//El metodo que lo invoque debera tratar la exepcion
            }
            finally//Si la conexion se pudo abrir hay que cerrarla
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
            }
            
            return listaDoc;
        }

        public static List<TipoDocumento> ObtenerTodos()
        {
            List<TipoDocumento> tiposDocumento = new List<TipoDocumento>();
            try
            {
                using (SqlConnection conn = AccesoDato.Conectar())
                {
                    string query = "SELECT IdTipoDocumento, Descripcion FROM TipoDocumento";
                    SqlCommand cmd = new SqlCommand(query, conn);
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();

                    while (dr.Read())
                    {
                        int id = dr.GetInt32(0);
                        string descripcion = dr.GetString(1);
                        tiposDocumento.Add(new TipoDocumento(id, descripcion));
                    }
                }
            }
            catch (SqlException ex)
            {
                throw new Exception("No se pudieron obtener los tipos de documento");
            }
            return tiposDocumento;
        }

        public static TipoDocumento ObtenerPorId(int id)
        {
            TipoDocumento tipoDocumento = null;
            try
            {
                using (SqlConnection conn = AccesoDato.Conectar())
                {
                    string query = "SELECT IdTipoDocumento, Descripcion FROM TipoDocumento WHERE IdTipoDocumento = @IdTipoDoc";
                    SqlCommand cmd = new SqlCommand(query, conn);
                    cmd.Parameters.AddWithValue("@IdTipoDoc", id);
                    conn.Open();
                    SqlDataReader dr = cmd.ExecuteReader();

                    if (dr.Read())
                    {
                        int idTipoDoc = dr.GetInt32(0);
                        string desTipoDoc = dr.GetString(1);
                        tipoDocumento = new TipoDocumento(idTipoDoc, desTipoDoc);
                    }
                }
            }
            catch (SqlException ex)
            {
                throw new Exception("No se pudo obtener el tipo de documento");
            }
            return tipoDocumento;
        }
       
        //Metodo para obtener un tipo de documento por id
        public static TipoDocumento obtenerTipoDocPorId(int id)
        {
            TipoDocumento tipoDoc = new TipoDocumento();
            SqlConnection cn = null;
            try
            {
                cn = AccesoDato.dameConexion(); ;
                cn.Open();
                SqlCommand cmd = new SqlCommand();
                string sql = "select * from TipoDocumento where IdTipoDocumento = @id";
                cmd.Parameters.Add(new SqlParameter("@id", id));
                cmd.CommandText = sql;
                cmd.Connection = cn;
                SqlDataReader dr = cmd.ExecuteReader();
                if (dr.Read())
                {
                    tipoDoc.IdTipoDocumento = id;
                    tipoDoc.Descripcion = dr["Descripcion"].ToString();
                }
                dr.Close();
            }
            catch (Exception ex)
            {
                throw new Exception("No se pudo obtener los datos de tipo de documento");//El metodo que lo invoque debera tratar la exepcion
            }
            finally//Si la conexion se pudo abrir hay que cerrarla
            {
                if (cn.State == ConnectionState.Open)
                    cn.Close();
            }
            return tipoDoc;
        }
    }
}
